x11: Trap possible X error
authorMatthias Clasen <mclasen@redhat.com>
Wed, 11 May 2016 01:29:10 +0000 (21:29 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 11 May 2016 01:29:10 +0000 (21:29 -0400)
XIGetClientPointer can generate X errors (e.g. when the X server
does not support XI2. Trap them and carry on.

https://bugzilla.gnome.org/show_bug.cgi?id=766233

gdk/x11/gdkdisplay-x11.c

index f7c79c4559fdfffb2d2d6872d94dbcc5c17ee5ea..ad65e297b1aadae97e8e9338e3665d398da2f03e 100644 (file)
@@ -2881,10 +2881,14 @@ gdk_x11_display_get_default_seat (GdkDisplay *display)
 {
   GList *seats, *l;
   int device_id;
+  gboolean result = FALSE;
 
   seats = gdk_display_list_seats (display);
-  XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
-                      None, &device_id);
+
+  gdk_x11_display_error_trap_push (display);
+  result = XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
+                               None, &device_id);
+  gdk_x11_display_error_trap_pop_ignored (display);
 
   for (l = seats; l; l = l->next)
     {
@@ -2892,7 +2896,7 @@ gdk_x11_display_get_default_seat (GdkDisplay *display)
 
       pointer = gdk_seat_get_pointer (l->data);
 
-      if (gdk_x11_device_get_id (pointer) == device_id)
+      if (gdk_x11_device_get_id (pointer) == device_id || !result)
         {
           GdkSeat *seat = l->data;
           g_list_free (seats);